<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 初始化猜测数据
        let numlist = [...Array(10000)].map((_, i) => {
            return i.toString().padStart(4, "0")
        });


        let num_len = numlist.length

        //输入的值
        let input = `6
4815 1A1B
5716 0A1B
7842 0A1B
4901 0A0B
8585 3A0B
8555 2A1B`

        // 解析输入值
        function Numberset(input) {
            let inputs = input.split('\n')
            inputs = inputs.map((value) => {
                return value.trim()
            })
            return inputs
        }
        input = Numberset(input)//转化为数组，第一个值为N，其他为猜测与提示
        let N = parseInt(input[0], 10)

        var [L, R, A, B, Tag] = [[], [], [], [], []];

        // 预处理
        for (let i = 1; i <= N; i++) {
            let [T, M] = input[i].split(' ')// T为输入的数字，M为提示                
            let [A_A, B_B] = [parseInt(M[0], 10), parseInt(M[2], 10)]// A为数字正确位置正确的个数，B为数字正确位置不正确的个数
            // let [q, b, s, g] = [T[0], T[1], T[2],T[3]]
            let [q, b, s, g] = [parseInt(T[0]), parseInt(T[1]), parseInt(T[2]), parseInt(T[3])]//取输入的数字各个位置的值
            L.push([q, b, s, g])
            R.push(M)
            A.push(A_A)//代表提供的数中有A个数是对的并且位置也对，所以答案最多有A个数与这个数相等
            B.push(B_B)//代表提供的数中有B个数是对的，但是位置不对，所以答案只要满足其中一个数和本次提供的任意数相等并且位置不同即可
            Tag.push(T)
        }

        // 判断是否符合当前条件
        function caishu(tag, num) {
            let X= 0;
            let Y=0;
            let tag_lis = new Array(10).fill(0);
            let num_lis = new Array(10).fill(0);

            for (let i = 0; i < 4; i++) {
                // 判断测试数与提示数有几个相等的，存入X
                if(tag[i]===num[i]){
                    X++;                     
                }else{
                    tag_lis[parseInt(tag[i],10)]++
                    num_lis[parseInt(num[i],10)]++
                }
            }
            for(let i=0;i<10;i++){
                Y+=Math.min(tag_lis[i],num_lis[i])
            }
            
            return `${X}A${Y}B`
        }
        console.log(numlist);
        console.log([L, R, A, B,Tag]);
        let res = []
        
        // 遍历猜测组
        for (let i = 0; i < N; i++) {
            //存符合当前猜测组符合的数
            let now = []
            // 猜测所有数
            for (let j = 0; j < num_len; j++) {
                let rt = caishu(Tag[i], numlist[j])         
                
                if (rt === R[i]) {
                    now.push(numlist[j])
                }
            }
            numlist = now;
            num_len = numlist.length;                  
        }
        console.log(numlist);
        


    </script>
</body>

</html>